home *** CD-ROM | disk | FTP | other *** search
- 10 ' MENU MAKER
- 20 ' by Andrew Fluegelman
- 30 ' Copyright (c) 1984 The Headlands Press, Inc.
- 40 ' May be reproduced in any medium for non-commercial use.
- 50 '
- 100 ' initialize
- 105 DEFINT A-Z:ON ERROR GOTO 9000
- 110 DEF FNLOCA(R,C)=160*R+2*C-162
- 115 DEF FNATTR(F,B)=-128*(F>15)+(F MOD 16)+(16*(B MOD 8))
- 120 DIM BK(4000) ' array for block karacters
- 125 DIM LIN1(160) ' array for line 1
- 130 R=1:C=1:FG=7:BG=0:I=0:J=0
- 135 DFG=7:DBG=0 ' default foreground & background colors
- 140 CR$=CHR$(13):BS$=CHR$(8):TB$=CHR$(9)
- 145 MARKED=0:MARK$="Z":CUT=0:CUT$="X":COPY$="C"
- 150 DELAY=10 '# ticks for delay
- 155 ASCIIVAL$=CHR$(0)
- 160 MMTEMP$="mmtemp.bin":MMHELP$="mmhelp.bin":INFIL$="mmsave.bin":SHOWFIL=0
- 165 DEF SEG=0:IF (PEEK(&H410) AND &H30)=&H30 THEN ADDRSEG=&HB000 ELSE ADDRSEG=&HB800
- 170 DEF SEG=ADDRSEG
- 200 ' startup
- 205 KEY OFF:FOR I=1 TO 10:KEY I, "":NEXT
- 210 COLOR DFG,DBG:SCREEN 0:WIDTH 80:CLS:LOCATE 1,1,0
- 215 PRINT TAB(15) " * * * * * * MENU MAKER * * * * * *
- 220 PRINT TAB(15) " by Andrew Fluegelman
- 225 PRINT
- 230 PRINT TAB(15) "Copyright (c) 1984 The Headlands Press, Inc.
- 235 PRINT:PRINT" This program may be reproduced in any medium for non-commercial use.
- 240 GOSUB 8500:CLS
- 300 ' main loop
- 305 LOCATE R,C,1
- 310 K$=INKEY$: IF K$="" THEN 310
- 315 IF LEN(K$)>1 THEN GOSUB 500:GOTO 300
- 320 IF K$=CR$ THEN R=R+1:C=1:GOSUB 2000:GOTO 300
- 325 IF K$=BS$ THEN 455
- 330 IF K$=TB$ THEN C=C+5:GOSUB 2000:GOTO 300
- 335 GOSUB 400
- 340 GOTO 300
- 400 ' print k$
- 405 LOCA=FNLOCA(R,C):POKE LOCA,ASC(K$):POKE LOCA+1,FNATTR(FG,BG)
- 410 GOSUB 415:GOSUB 2000:RETURN
- 415 ' advance horizontally or vertically
- 420 IF VERT THEN R=R+1:RETURN ELSE C=C+1:RETURN
- 450 ' backspace
- 455 IF VERT THEN R=R-1 ELSE C=C-1
- 460 GOSUB 2000:K$=" ":GOSUB 400
- 465 IF VERT THEN R=R-1 ELSE C=C-1
- 470 GOSUB 2000:GOTO 300
- 500 ' extended keys
- 505 XK=ASC(MID$(K$,2,1))
- 510 IF XK>=16 AND XK <=50 THEN 700
- 515 IF (XK>=59 AND XK<=68) OR (XK>=84 AND XK<=113) THEN 800
- 520 IF (XK>=120 AND XK<=131) THEN 900
- 600 ' cursor control
- 605 IF XK=15 THEN C=C-5:GOSUB 2000:RETURN
- 610 IF XK=77 THEN C=C+1:GOSUB 2000:RETURN
- 615 IF XK=75 THEN C=C-1:GOSUB 2000:RETURN
- 620 IF XK=80 THEN R=R+1:GOSUB 2000:RETURN
- 625 IF XK=82 THEN GOSUB 8500:RETURN ' help
- 630 IF XK=72 THEN R=R-1:GOSUB 2000:RETURN
- 635 IF XK=71 THEN C=1:RETURN
- 640 IF XK=79 THEN C=80:RETURN
- 645 IF XK=115 THEN C=C-5:GOSUB 2000:RETURN
- 650 IF XK=116 THEN C=C+5:GOSUB 2000:RETURN
- 655 IF XK=119 THEN R=1:C=1:RETURN
- 660 IF XK=117 THEN R=25:C=1:RETURN
- 665 BEEP:RETURN
- 700 ' <alt>+alpha keys
- 702 IF XK=16 THEN GOSUB 8000:RETURN ' Quit
- 704 IF XK=17 THEN GOSUB 4200:RETURN ' Wipe screen clean
- 706 IF XK=20 THEN GOSUB 3200:RETURN ' Load a Text file
- 708 IF XK=22 THEN GOSUB 4900:RETURN ' Universal Foreground/Background
- 710 IF XK=23 THEN GOSUB 4400:RETURN ' Invert
- 712 IF XK=24 THEN GOSUB 5000:RETURN ' choose mOnO or cOlOr
- 714 IF XK=25 THEN GOSUB 7500:RETURN ' Print the screen to printer
- 716 IF XK=38 THEN GOSUB 3000:RETURN ' Load file
- 718 IF XK=30 THEN GOSUB 4800:RETURN ' print ASCII memory
- 720 IF XK=31 THEN GOSUB 3400:RETURN ' Save file
- 722 IF XK=32 THEN GOSUB 4650:RETURN ' change Direction
- 724 IF XK=33 THEN GOSUB 4000 :RETURN ' set Foreground color
- 726 IF XK=35 THEN GOSUB 4500:RETURN ' High intensity
- 728 IF XK=34 THEN GOSUB 4600:RETURN ' flashinG
- 730 IF XK=44 THEN GOSUB 1000:RETURN ' mark block Z
- 732 IF XK=45 THEN CUT=-1:GOSUB 1100:RETURN ' cut X
- 734 IF XK=46 THEN CUT=0:GOSUB 1100:RETURN ' copy C
- 736 IF XK=47 THEN GOSUB 1200:RETURN ' paste (V)
- 738 IF XK=48 THEN GOSUB 4100:RETURN 'set Background color
- 740 IF XK=49 THEN GOSUB 4300:RETURN ' Normal text
- 742 IF XK=50 THEN GOSUB 4700:RETURN ' set ASCII Memory
- 744 BEEP:RETURN
- 800 ' function keys
- 811 IF XK=59 THEN K$=CHR$(218):GOSUB 400:RETURN
- 812 IF XK=60 THEN K$=CHR$(191):GOSUB 400:RETURN
- 813 IF XK=61 THEN K$=CHR$(192):GOSUB 400:RETURN
- 814 IF XK=62 THEN K$=CHR$(217):GOSUB 400:RETURN
- 815 IF XK=63 THEN K$=CHR$(195):GOSUB 400:RETURN
- 816 IF XK=64 THEN K$=CHR$(180):GOSUB 400:RETURN
- 817 IF XK=65 THEN K$=CHR$(194):GOSUB 400:RETURN
- 818 IF XK=66 THEN K$=CHR$(193):GOSUB 400:RETURN
- 819 IF XK=67 THEN K$=CHR$(179):GOSUB 400:RETURN
- 820 IF XK=68 THEN K$=CHR$(196):GOSUB 400:RETURN
- 821 IF XK=104 THEN K$=CHR$(201):GOSUB 400:RETURN
- 822 IF XK=105 THEN K$=CHR$(187):GOSUB 400:RETURN
- 823 IF XK=106 THEN K$=CHR$(200):GOSUB 400:RETURN
- 824 IF XK=107 THEN K$=CHR$(188):GOSUB 400:RETURN
- 825 IF XK=108 THEN K$=CHR$(204):GOSUB 400:RETURN
- 826 IF XK=109 THEN K$=CHR$(185):GOSUB 400:RETURN
- 827 IF XK=110 THEN K$=CHR$(203):GOSUB 400:RETURN
- 828 IF XK=111 THEN K$=CHR$(202):GOSUB 400:RETURN
- 829 IF XK=112 THEN K$=CHR$(186):GOSUB 400:RETURN
- 830 IF XK=113 THEN K$=CHR$(205):GOSUB 400:RETURN
- 831 IF XK=84 THEN K$=CHR$(214):GOSUB 400:RETURN
- 832 IF XK=85 THEN K$=CHR$(183):GOSUB 400:RETURN
- 833 IF XK=86 THEN K$=CHR$(211):GOSUB 400:RETURN
- 834 IF XK=87 THEN K$=CHR$(189):GOSUB 400:RETURN
- 835 IF XK=88 THEN K$=CHR$(199):GOSUB 400:RETURN
- 836 IF XK=89 THEN K$=CHR$(182):GOSUB 400:RETURN
- 837 IF XK=90 THEN K$=CHR$(210):GOSUB 400:RETURN
- 838 IF XK=91 THEN K$=CHR$(208):GOSUB 400:RETURN
- 839 IF XK=92 THEN K$=CHR$(197):GOSUB 400:RETURN
- 840 IF XK=93 THEN K$=CHR$(215):GOSUB 400:RETURN
- 841 IF XK=94 THEN K$=CHR$(213):GOSUB 400:RETURN
- 842 IF XK=95 THEN K$=CHR$(184):GOSUB 400:RETURN
- 843 IF XK=96 THEN K$=CHR$(212):GOSUB 400:RETURN
- 844 IF XK=97 THEN K$=CHR$(190):GOSUB 400:RETURN
- 845 IF XK=98 THEN K$=CHR$(198):GOSUB 400:RETURN
- 846 IF XK=99 THEN K$=CHR$(181):GOSUB 400:RETURN
- 847 IF XK=100 THEN K$=CHR$(209):GOSUB 400:RETURN
- 848 IF XK=101 THEN K$=CHR$(207):GOSUB 400:RETURN
- 849 IF XK=102 THEN K$=CHR$(206):GOSUB 400:RETURN
- 850 IF XK=103 THEN K$=CHR$(216):GOSUB 400:RETURN
- 895 BEEP:RETURN
- 900 ' Alt + number keys
- 901 IF XK=120 THEN K$=CHR$(221):GOSUB 400:RETURN
- 902 IF XK=121 THEN K$=CHR$(222):GOSUB 400:RETURN
- 903 IF XK=122 THEN K$=CHR$(223):GOSUB 400:RETURN
- 904 IF XK=123 THEN K$=CHR$(220):GOSUB 400:RETURN
- 905 IF XK=124 THEN K$=CHR$(219):GOSUB 400:RETURN
- 995 BEEP:RETURN
- 1000 ' mark block
- 1005 IF MARKED THEN POKE B1M,B1K:POKE B1M+1,B1A
- 1010 B1M=FNLOCA(R,C):B1K=PEEK(B1M):B1A=PEEK(B1M+1):B1R=R:B1C=C
- 1015 POKE B1M,ASC(MARK$):POKE B1M+1,FNATTR(DBG,DFG):MARKED=-1:RETURN
- 1100 ' cut or copy a block
- 1105 MARKED=0
- 1110 B2M=FNLOCA(R,C):B2K=PEEK(B2M):B2A=PEEK(B2M+1):B2R=R:B2C=C
- 1115 POKE B2M+1,FNATTR(DBG,DFG):IF CUT THEN POKE B2M,ASC(CUT$) ELSE POKE B2M,ASC(COPY$)
- 1120 IF B1R>B2R THEN SWAP B1R,B2R:SWAP B1C,B2C ELSE IF B1R=B2R AND B1C>B2C THEN SWAP B1C,B2C
- 1125 ' cut/copy block
- 1130 DATTR=FNATTR(FG,BG)
- 1135 FOR I=B1R TO B2R:FOR J=B1C TO B2C
- 1140 LOCA=FNLOCA(I,J):BK(LOCA)=PEEK(LOCA):BK(LOCA+1)=PEEK(LOCA+1)
- 1145 IF CUT THEN POKE LOCA,32:POKE LOCA+1,DATTR
- 1150 NEXT J:NEXT I
- 1155 ' restore screen chars
- 1160 BK(B1M)=B1K:BK(B1M+1)=B1A
- 1165 BK(B2M)=B2K:BK(B2M+1)=B2A
- 1170 IF CUT THEN 1185
- 1175 POKE B1M,B1K:POKE B1M+1,B1A
- 1180 POKE B2M,B2K:POKE B2M+1,B2A
- 1185 R=B1R:C=B1C:RETURN
- 1200 ' paste block
- 1205 RR=R:CC=C
- 1210 IF (B2R-B1R+1>25-R+1) OR (B2C-B1C+1>80-C+1) THEN MSG$="Block too big to paste there":GOSUB 2300:GOSUB 2500:GOSUB 2700:RETURN
- 1215 FOR I=B1R TO B2R:FOR J=B1C TO B2C
- 1220 PASTELOCA=FNLOCA(R,C):BLOCKLOCA=FNLOCA(I,J):POKE PASTELOCA,BK(BLOCKLOCA):POKE PASTELOCA+1,BK(BLOCKLOCA+1)
- 1225 C=C+1:NEXT J:R=R+1:C=CC:NEXT I
- 1230 R=RR:C=CC:RETURN
- 2000 ' check for proper cursor position
- 2005 IF C>80 THEN C=1:R=R+1
- 2010 IF C<1 THEN C=80:R=R-1
- 2015 IF R>25 THEN R=1
- 2020 IF R<1 THEN R=25
- 2025 RETURN
- 2200 ' message routines
- 2300 SOUND 2000,1
- 2400 M=LEN(MSG$):FOR I=0 TO 2*M-1:LIN1(I)=PEEK(I):NEXT
- 2410 LOCATE 1,1:COLOR DBG,DFG:PRINT MSG$;:RETURN
- 2500 SOUND 32767,DELAY:SOUND 32767,1:RETURN ' delay
- 2600 FOR I=2*M TO 159:LIN1(I)=PEEK(I):NEXT
- 2610 LOCATE 1,M+1:PRINT SPACE$(78-M);:LOCATE 1,M+1:M=78:RETURN 'blank space for input q$
- 2700 FOR I=0 TO 2*M-1:POKE I,LIN1(I):NEXT:RETURN ' restore chars
- 3000 ' load Binary file
- 3005 MSG$="Load Binary file:":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 3010 IF Q$="" THEN 3300
- 3015 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3000
- 3020 GOSUB 3500:INFIL$=Q$
- 3025 BLOAD INFIL$,0
- 3030 SHOWFIL=0:RETURN
- 3200 ' load Text (ASCII) file
- 3205 MSG$="Load Text file:":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 3210 IF Q$="" THEN 3300
- 3215 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3200
- 3220 GOSUB 3500:INFIL$=Q$
- 3225 OPEN INFIL$ FOR INPUT AS #1:SHOWFIL=0
- 3230 COLOR FG,BG:CLS:LOCA=FNLOCA(1,1):ATTR=FNATTR(FG,BG):RR=0
- 3235 WHILE NOT EOF(1) AND RR<=25
- 3240 RR=RR+1:LINE INPUT #1, L$
- 3245 L=LEN(L$):IF L>80 THEN L=80
- 3250 CLOCA=LOCA
- 3255 FOR I=1 TO L:POKE CLOCA,ASC(MID$(L$,I,1)):POKE CLOCA+1,ATTR
- 3260 CLOCA=CLOCA+2:NEXT I
- 3265 LOCA=LOCA+160
- 3270 WEND
- 3275 CLOSE #1:LOCATE 1,1:R=1:C=1:RETURN
- 3300 ' cancel load routine
- 3305 IF SHOWFIL THEN GOSUB 2700:GOSUB 5950:SHOWFIL=0:RETURN
- 3310 GOSUB 2700:RETURN
- 3400 ' save a file
- 3405 MSG$="Save file name:":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 3410 IF LEFT$(Q$,1)="?" THEN GOSUB 8900:GOTO 3400
- 3415 GOSUB 3300:IF Q$="" THEN RETURN
- 3420 IF Q$=" " THEN OUTFIL$=INFIL$ ELSE GOSUB 3500:OUTFIL$=Q$
- 3425 BSAVE OUTFIL$,0,&H1000
- 3430 RETURN
- 3500 ' process q$ for proper file name
- 3505 IF INSTR(Q$,".")=0 THEN Q$=Q$+"."
- 3510 RETURN
- 4000 ' set foreground color
- 4005 MSG$="Foreground color value (0-31):":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 4010 IF Q$="" THEN GOSUB 2700:RETURN
- 4015 FG=VAL(Q$) MOD 32
- 4020 GOSUB 2700:RETURN
- 4100 ' set background color
- 4105 MSG$="Background color value (0-7):":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 4110 IF Q$="" THEN GOSUB 2700:RETURN
- 4115 BG=VAL(Q$) MOD 8
- 4120 GOSUB 2700:RETURN
- 4200 ' wipe screen clean
- 4205 MSG$="Wipe over screen with Background color value (y/n?):":GOSUB 2300:GOSUB 6000
- 4210 IF Q$<>"Y" AND Q$<>"y" THEN GOSUB 2700:RETURN
- 4220 COLOR FG,BG:CLS:RETURN
- 4300 ' normal text
- 4305 MSG$="Normal Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
- 4310 FG=FG MOD 8:RETURN
- 4400 ' invert colors
- 4405 MSG$="Invert Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
- 4410 SWAP FG,BG:BG=BG MOD 8:RETURN
- 4500 ' high intensity text
- 4505 MSG$="High Intensity Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
- 4510 IF (FG>=0 AND FG<=7) OR (FG>=16 AND FG<=23) THEN FG=FG+8:RETURN ELSE RETURN
- 4600 ' flashing text
- 4605 MSG$="Flashing Text":GOSUB 2300:GOSUB 2500:GOSUB 2700
- 4610 IF FG>=0 AND FG<=15 THEN FG=FG+16:RETURN ELSE RETURN
- 4650 ' change direction of cursor movement
- 4655 IF NOT VERT THEN VERT=-1:MSG$="Vertical Cursor" ELSE VERT=0:MSG$="Horizontal Cursor
- 4660 GOSUB 2300:GOSUB 2500:GOSUB 2700
- 4665 RETURN
- 4700 ' input any ascii character
- 4705 MSG$="ASCII value:":GOSUB 2300:GOSUB 2600:GOSUB 6000
- 4710 ASCIIVAL$=CHR$(VAL(Q$))
- 4715 GOSUB 2700
- 4720 RETURN
- 4800 ' print ASCII memory char
- 4805 K$=ASCIIVAL$:GOSUB 400:RETURN
- 4900 ' universal foreground/background
- 4905 MSG$="Universal foregound/background (y/n?):":GOSUB 2300:GOSUB 7000
- 4910 GOSUB 2700:IF Q$<>"Y" AND Q$<>"y" THEN RETURN
- 4915 MSG$="New Foregound (0-31)":GOSUB 2400:GOSUB 2600:GOSUB 6000
- 4920 GOSUB 2700:IF Q$="" THEN RETURN ELSE OFG=FG:FG=VAL(Q$) MOD 32
- 4925 MSG$="New Background (0-7)":GOSUB 2400:GOSUB 2600:GOSUB 6000
- 4930 GOSUB 2700:IF Q$="" THEN RETURN ELSE OBG=BG:BG=VAL(Q$) MOD 8
- 4935 FOR I=1 TO 3999 STEP 2:J=PEEK(I):IF J=FNATTR(OBG,OFG) THEN POKE I,FNATTR(BG,FG) ELSE POKE I,FNATTR(FG,BG)
- 4940 NEXT I:RETURN
- 5000 ' switch to monochrome or color
- 5005 MSG$="Work with Monochrome or Color screen (m/c?):":GOSUB 2300:GOSUB 7000:GOSUB 2700
- 5010 IF Q$="m" OR Q$="M" THEN GOSUB 5900:GOSUB 5100:GOSUB 5950:RETURN
- 5015 IF Q$="c" OR Q$="C" THEN GOSUB 5900:GOSUB 5200:GOSUB 5950:RETURN
- 5020 RETURN
- 5100 ' switch to mono
- 5105 DEF SEG=0:POKE &H410, (PEEK(&H410) OR &H30)
- 5110 SCREEN 0:WIDTH 80:LOCATE ,,1,12,13
- 5115 DEF SEG=&HB000:RETURN
- 5200 ' switch to color
- 5205 DEF SEG=0:POKE &H410, (PEEK(&H410) AND &HCF) OR &H10
- 5210 SCREEN 1,0,0,0:SCREEN 0:WIDTH 80:LOCATE ,,1,6,7
- 5215 DEF SEG=&HB800:RETURN
- 5900 ' save mmtempfl
- 5905 BSAVE MMTEMP$,0,&H1000
- 5910 RETURN
- 5950 ' recall mmtempfl
- 5955 BLOAD MMTEMP$,0
- 5960 RETURN
- 6000 ' input routine
- 6005 Q$=""
- 6010 QI$=INKEY$:IF QI$="" THEN 6010
- 6015 IF QI$=CHR$(13) THEN RETURN
- 6020 IF QI$<>CHR$(8) THEN 6030 ELSE IF Q$="" THEN BEEP:GOTO 6010
- 6025 IF QI$=CHR$(8) THEN PRINT CHR$(29);" ";CHR$(29);:Q$=LEFT$(Q$,LEN(Q$)-1):GOTO 6010
- 6030 PRINT QI$;:Q$=Q$+QI$:GOTO 6010
- 7000 ' inkey routine
- 7010 Q$=INKEY$:IF Q$="" THEN 7010
- 7020 RETURN
- 7500 ' lprint table with grid numbers
- 7505 LPRINT CHR$(15):WIDTH "lpt1:",132' switch to condensed/132 col width
- 7510 GOSUB 7555
- 7515 FOR I=0 TO 24
- 7520 IF I<10 THEN LPRINT " ";
- 7525 LPRINT I;
- 7530 FOR J=0 TO 79
- 7535 L=PEEK(160*I+J):LPRINT CHR$(L);
- 7540 NEXT J:LPRINT " ";I
- 7545 NEXT I
- 7550 GOSUB 7555:RETURN
- 7555 LPRINT" 0";:FOR I=1 TO 78
- 7560 IF I MOD 10=0 THEN LPRINT "*";:GOTO 7575
- 7565 IF I MOD 5=0 THEN LPRINT "!";:GOTO 7575
- 7570 LPRINT".";
- 7575 NEXT I:LPRINT"79":RETURN
- 8000 ' quit
- 8010 MSG$="QUIT MENU MAKER?":GOSUB 2300:GOSUB 2600:GOSUB 7000
- 8020 IF Q$<>"y" AND Q$<>"Y" THEN GOSUB 2700:RETURN
- 8025 KILL MMTEMP$:SYSTEM
- 8500 ' print help to screen
- 8505 GOSUB 5900
- 8510 BLOAD MMHELP$,0
- 8515 K$=INKEY$:IF K$="" THEN 8515
- 8520 GOSUB 5950
- 8525 RETURN
- 8900 ' show files
- 8905 IF NOT SHOWFIL THEN SHOWFIL=-1:GOSUB 2700:GOSUB 5900
- 8910 IF LEN(Q$)>1 THEN FIL$=RIGHT$(Q$,LEN(Q$)-1) ELSE FIL$=""
- 8915 IF LEFT$(FIL$,1)=" " THEN FIL$=RIGHT$(FIL$,LEN(FIL$)-1):GOTO 8915
- 8925 COLOR DBG,DFG:CLS:LOCATE 2,1
- 8930 PRINT "Available Files are:":COLOR DFG,DBG
- 8935 IF FIL$<>"" THEN FILES FIL$ ELSE FILES
- 8940 COLOR DBG,DFG
- 8945 RETURN
- 9000 ' error traps
- 9005 IF ERL=3025 THEN BEEP:GOSUB 2700:RESUME 3000
- 9010 IF ERL=3225 THEN BEEP:GOSUB 2700:RESUME 3200
- 9015 IF ERL=3425 THEN BEEP:GOSUB 2700:RESUME 3400
- 9020 IF ERL=8510 THEN BEEP:MSG$="No "+MMHELP$+" file available":GOSUB 2400:FOR I=1 TO 3:GOSUB 2500:NEXT I:RESUME 8520
- 9999 ON ERROR GOTO 0